package cn.yunyichina.provider.iface.service;

import cn.yunyichina.provider.iface.entity.common.Response;

/**
 * 云医通缓存服务子系统对外接口
 * 
 * @author zhangkw
 * @date 2016-07-28
 * 
 */
public interface ICache extends IService {

    /**
     * 设置全局Key
     * 
     * @param system
     *            系统名 如:base,hisface,cache,authorize等
     * @param region
     *            区域 如:hospital.branch
     * @param key
     *            key szszyy.254156X
     * @param jsonData
     *            json数据
     * @param expireTime
     *            超时时间 单位:秒 0为不超时，其他设置超时时间
     * @return
     */
    Response setGlobalKey(String system, String region, String key, String jsonData, int expireTime);

    /**
     * 设置会话key，默认超时时间：30分钟
     * 
     * @param sessionId
     *            会话sessionid
     * @param key
     *            键值，按"."分隔
     * @param jsonData
     *            json数据
     * @return
     */
    boolean setSessionKey(String sessionId, String key, String jsonData);
    
    
    /**
     * 设置会话key，按设备类型设置session的超时时间
     * 
     * @param sessionId
     *            会话sessionid
     * @param key
     *            键值，按"."分隔
     * @param deviceType
     *            设备类型
     * @param jsonData
     *            json数据
     * @return
     */
    boolean setSessionKey(String sessionId, String key,int deviceType, String jsonData);


    /**
     * setSessionKeyExpireTime(设置session的超时时间)
     * @param sessionId
     *          会话sessionid
     * @param key
     */
    void setSessionKeyExpireTime(String sessionId, String key);
    
    

    /**
     * 获取全局Key
     * 
     * @param system
     *            系统名 如:base,hisface,cache,authorize等
     * @param region
     *            区域 如:hospital
     * @param key
     *            键值
     * @return
     */
    String getGlobalKey(String system, String region, String key);

    /**
     * 获取会话Key的内容
     * 
     * @param sessionId
     * @param key
     * @return
     */
    String getSessionKey(String sessionId, String key);

    /**
     * 删除全局Key
     * 
     * @param system
     *            系统名 如:base,hisface,cache,authorize等
     * @param region
     *            区域 如:hospital
     * @param key
     *            键值
     * @return
     */
    boolean delGlobalKey(String system, String region, String key);

    /**
     * 删除过期的sessionKey
     * @param sessionId
     * @param key
     * @return
     */
    boolean delSessionKey(String sessionId, String key);

    /**
     * 全局产生订单号
     * 
     * @param bizType
     *            业务类型 1-挂号 2-门诊 3-住院 4-押金
     * @param tradeType
     *            1-支付 2-退款
     * @return
     */
    String generateOrderNum(int bizType, int tradeType);
    
    /**
     * 获取过期时间，单位：秒
     * 
     * @param system
     *            系统名 如:base,hisface,cache,authorize等
     * @param region
     *            区域 如:hospital
     * @param key
     *            键值
     * @return 过期时间，秒
     */
    long ttl(String system, String region, String key);

    /**
     * 设置全局Key的hash中的field对应的value值
     *
     * @param system
     *            系统名 如:base,hisface,cache,authorize等
     * @param region
     *            区域 如:hospital.branch
     * @param key
     *            key szszyy.254156X
     * @param field
     *
     * @param jsonData
     *            json数据
     * @return
     */
    Response setGlobalKeyHash(String system, String region, String key, String field,String jsonData) ;

    /**
     * 获取全局Key的hash中的field对应的value值
     *
     * @param system
     *            系统名 如:base,hisface,cache,authorize等
     * @param region
     *            区域 如:hospital.branch
     * @param key
     *            key szszyy.254156X
     * @param field
     * @return
     */
    String getGlobalKeyHash(String system, String region, String key,String field);

    /**
     * 删除全局Key的hash中的field对应的value值
     * @param system
     * @param region
     * @param key
     * @param field
     * @return
     */
    boolean delGlobalKeyHash(String system, String region, String key,String field);


    /**
     * 设置api接口放到reids缓存上
     * @param key
     * @param apiJson
     */
    void setApiCache(String key,String apiJson);

    /**
     * 获取apiCache
     * @param key
     * @return
     */
    String getApiCache(String key);

    /**
     * 删除api的缓存
     * @param key
     */
    void deleteApiCache(String key);

    /**
     * 设置医生信息缓存 sys_doctor表
     * @param key
     * @param value
     */
    void setDoctorCache(String key,String value);


    /**
     * 获取医生缓存信息
     * @param key
     * @return
     */
    String getDoctorCache(String key);

    /**
     * 删除医院缓存信息
     * @param key
     */
    void deleteDoctorCache(String key);


    /**
     * 设置Key对
     * @param key
     * @param value
     */
    void setLoginAuthSessionIdCache(String key,String value);


    /**
     * 获取sessionid对的缓存
     * @param key
     * @return
     */
    String getLoginAuthSessionIdCache(String key);

    /**
     * 删除sessionid对的缓存
     * @param key
     */
    void deleteLoginAuthSessionIdCache(String key);

    /**
     * 获取锁
     * @param key
     * @param timeOutSeconds
     * @return
     */
    boolean getLock(String key,int timeOutSeconds);

    /**
     * 设置锁的超时时间
     * @param key
     * @param timeOutSeconds
     */
    void expireKey(String key, int timeOutSeconds);
}
